home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -in_the_mag- / banging_the_metal / cd32 / nvtools / setnv.mod < prev    next >
Text File  |  1999-11-30  |  2KB  |  82 lines

  1. MODULE SetNV;
  2. (*
  3.   $StackChk-
  4.   $RangeChk-
  5.   $NilChk-
  6.   $OvflChk-
  7.   $ReturnChk-
  8.   $CaseChk-
  9. *)
  10.  
  11. IMPORT
  12.   y := SYSTEM,
  13.  
  14.   (* Interfaces *)
  15.   d := Dos,
  16.   e := Exec,
  17.   nv := NonVolatile,
  18.  
  19.   str := Strings;
  20.  
  21. CONST
  22.   template = "AN=APPNAME/A,IN=ITEMNAME/A,KR=KILLREQUESTER/S,DATA/A/F"
  23.              "\o$VER: SetNV.mod 1.0 (30.09.95)";
  24.  
  25. TYPE
  26.   Args = STRUCT (as :d.ArgsStruct)
  27.     appName  :d.ArgString;
  28.     itemName :d.ArgString;
  29.     killReq  :d.ArgBool;
  30.     data     :d.ArgString;
  31.   END;
  32.  
  33. VAR
  34.   args      :d.RDArgsPtr;
  35.   argv      :Args;
  36.  
  37.   size      :LONGINT;
  38.   info      :nv.NVInfoPtr;
  39.   err       :LONGINT;
  40.  
  41. BEGIN
  42.   IF nv.base=NIL THEN
  43.     d.PrintF("No nonvolatile.library!\n");
  44.     HALT(20);
  45.   END;
  46.  
  47.   args := d.ReadArgs(template, argv, NIL);
  48.   IF args=NIL THEN
  49.     IF d.PrintFault(d.IoErr(), "SetNV") THEN END;
  50.     HALT(20);
  51.   END;
  52.  
  53.   info := nv.GetNVInfo(argv.killReq);
  54.   size := str.Length(argv.data^) DIV 10 + 1;
  55.   d.PrintF("Size: %ld\n", size);
  56.   IF size>info.maxStorage THEN
  57.     d.PrintF("String too long (or NVRAM too small :)\n");
  58.     HALT(20);
  59.   END;
  60.  
  61.   err := nv.StoreNV(argv.appName^, argv.itemName^, y.VAL(nv.DataPtr, argv.data), size, argv.killReq);
  62.   CASE err OF
  63.     0:
  64.     |nv.errBadName:
  65.       d.PrintF("App or itemname is illegal\n");
  66.       HALT(20);
  67.     |nv.errWriteProt:
  68.       d.PrintF("NVRAM is write protected!\n");
  69.       HALT(20);
  70.     |nv.errFail:
  71.       d.PrintF("NVRAM is full or write protected!\n");
  72.       HALT(20);
  73.     |nv.errFatal:
  74.       d.PrintF("FATAL Error!\nPossible loss of data.");
  75.       HALT(20);
  76.     END;
  77.  
  78. CLOSE
  79.   d.FreeArgs(args);
  80.   nv.FreeNVData(y.VAL(nv.DataPtr, info));
  81. END SetNV.
  82.